﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using ProjetoDLL.Model;

namespace ProjetoDLL.DAO
{
    public class UsuarioDAO : BaseDAO<Usuario>
    {
        public override void Inserir(Usuario obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("INSERT INTO tb_usuario (nome, email, senha, logradouro, numero, bairro, cep, cidade, estado, cpf, status)"+
                " VALUES('{0}','{1}','{2}','{3}',{4},'{5}','{6}','{7}','{8}', '{9}', 'A')",
                obj.Nome, obj.Email, obj.Senha, obj.Logradouro, obj.Numero, obj.Bairro, obj.CEP, obj.Cidade, obj.Estado, obj.CPF);

            exec_comando(query, conexao);
        }

        public override void Atualizar(Usuario obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("UPDATE tb_usuario SET email='{0}', senha='{1}',"
            + "logradouro='{3}', numero={4}, bairro='{5}', cep='{6}', cidade='{7}', estado='{8}', nome='{9}', cpf='{10}', status='{11}' "
            + "WHERE pk_usuario={2}",
            obj.Email, obj.Senha, obj.IdUsuario,
            obj.Logradouro, obj.Numero, obj.Bairro, obj.CEP, obj.Cidade, obj.Estado, obj.Nome, obj.CPF, obj.Status);

            exec_comando(query, conexao);
        }

        public override void Excluir(Usuario obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("DELETE FROM tb_usuario WHERE pk_usuario = {0}", obj.IdUsuario);

            exec_comando(query, conexao);
        }

        public override Usuario RecuperarUm(int chave)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query;
            SqlDataReader dr;

            Usuario usuario = new Usuario();

            query = string.Format("SELECT * FROM tb_usuario WHERE pk_usuario = {0}", chave);

            SqlCommand cmd = new SqlCommand(query, conexao);

            conexao.Open();
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                usuario.IdUsuario = Convert.ToInt32(dr["pk_usuario"]);
                usuario.Nome = Convert.ToString(dr["nome"]);
                usuario.Email = Convert.ToString(dr["email"]);
                usuario.Senha = Convert.ToString(dr["senha"]);
                usuario.Logradouro = Convert.ToString(dr["logradouro"]);
                usuario.Numero = Convert.ToInt32(dr["numero"]);
                usuario.Bairro = Convert.ToString(dr["bairro"]);
                usuario.CEP = Convert.ToString(dr["cep"]);
                usuario.Cidade = Convert.ToString(dr["cidade"]);
                usuario.Estado = Convert.ToString(dr["estado"]);
                usuario.CPF = Convert.ToString(dr["cpf"]);
                usuario.Status = Convert.ToString(dr["status"]);
            }

            dr.Close();
            conexao.Close();

            return usuario;
        }

        public Usuario RecuperarUm(string email)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query;
            SqlDataReader dr;

            Usuario usuario = new Usuario();

            query = string.Format("SELECT * FROM tb_usuario WHERE email = '{0}'", email);

            SqlCommand cmd = new SqlCommand(query, conexao);

            conexao.Open();
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                usuario.IdUsuario = Convert.ToInt32(dr["pk_usuario"]);
                usuario.Nome = Convert.ToString(dr["nome"]);
                usuario.Email = Convert.ToString(dr["email"]);
                usuario.Senha = Convert.ToString(dr["senha"]);
                usuario.Logradouro = Convert.ToString(dr["logradouro"]);
                usuario.Numero = Convert.ToInt32(dr["numero"]);
                usuario.Bairro = Convert.ToString(dr["bairro"]);
                usuario.CEP = Convert.ToString(dr["cep"]);
                usuario.Cidade = Convert.ToString(dr["cidade"]);
                usuario.Estado = Convert.ToString(dr["estado"]);
                usuario.CPF = Convert.ToString(dr["cpf"]);
                usuario.Status = Convert.ToString(dr["status"]);
            }

            dr.Close();
            conexao.Close();

            return usuario;
        }

        public override List<Usuario> RecuperarTodos()
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            List<Usuario> listaEntidades = new List<Usuario>();
            SqlDataReader dr;
            SqlCommand cmd = new SqlCommand("SELECT * FROM tb_usuario", conexao);
            conexao.Open();
            dr = cmd.ExecuteReader();

            Usuario usuario;

            while (dr.Read())
            {
                usuario = new Usuario();
                usuario.IdUsuario = Convert.ToInt32(dr["pk_usuario"]);
                usuario.Nome = Convert.ToString(dr["nome"]);
                usuario.Email = Convert.ToString(dr["email"]);
                usuario.Senha = Convert.ToString(dr["senha"]);
                usuario.Logradouro = Convert.ToString(dr["logradouro"]);
                usuario.Numero = Convert.ToInt32(dr["numero"]);
                usuario.Bairro = Convert.ToString(dr["bairro"]);
                usuario.CEP = Convert.ToString(dr["cep"]);
                usuario.Cidade = Convert.ToString(dr["cidade"]);
                usuario.Estado = Convert.ToString(dr["estado"]);
                usuario.CPF = Convert.ToString(dr["cpf"]);
                usuario.Status = Convert.ToString(dr["status"]);
                listaEntidades.Add(usuario);
            }

            dr.Close();
            conexao.Close();

            return listaEntidades;
        }
    }
}
